#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PNG图片优化脚本 - 保持PNG格式但大幅压缩
"""

import os
import sys
from PIL import Image
import argparse

def optimize_png_image(input_path, output_path, max_size=(400, 400), quality=9):
    """
    优化PNG图片文件大小，保持PNG格式
    
    Args:
        input_path: 输入图片路径
        output_path: 输出图片路径
        max_size: 最大尺寸 (width, height)
        quality: PNG压缩质量 (0-9)
    """
    try:
        with Image.open(input_path) as img:
            # 保持原始模式（RGBA等）
            original_mode = img.mode
            
            # 调整尺寸
            if img.size[0] > max_size[0] or img.size[1] > max_size[1]:
                img.thumbnail(max_size, Image.Resampling.LANCZOS)
            
            # 保存优化后的PNG图片
            img.save(output_path, 'PNG', optimize=True, compress_level=quality)
            
            # 获取文件大小
            original_size = os.path.getsize(input_path)
            optimized_size = os.path.getsize(output_path)
            reduction = (original_size - optimized_size) / original_size * 100
            
            print(f"优化完成: {os.path.basename(input_path)}")
            print(f"  原始大小: {original_size/1024:.1f}KB")
            print(f"  优化后大小: {optimized_size/1024:.1f}KB")
            print(f"  减少: {reduction:.1f}%")
            print()
            
            return True
            
    except Exception as e:
        print(f"处理 {input_path} 时出错: {e}")
        return False

def main():
    parser = argparse.ArgumentParser(description='优化PNG图片资源')
    parser.add_argument('--input-dir', default='images', help='输入目录')
    parser.add_argument('--output-dir', default='images_optimized_png', help='输出目录')
    parser.add_argument('--max-width', type=int, default=400, help='最大宽度')
    parser.add_argument('--max-height', type=int, default=400, help='最大高度')
    parser.add_argument('--quality', type=int, default=9, help='PNG压缩质量 (0-9)')
    parser.add_argument('--threshold', type=int, default=100, help='只优化大于此大小(KB)的图片')
    
    args = parser.parse_args()
    
    # 创建输出目录
    os.makedirs(args.output_dir, exist_ok=True)
    
    # 获取所有PNG文件
    png_files = []
    for root, dirs, files in os.walk(args.input_dir):
        for file in files:
            if file.lower().endswith('.png'):
                file_path = os.path.join(root, file)
                file_size_kb = os.path.getsize(file_path) / 1024
                if file_size_kb > args.threshold:
                    png_files.append((file_path, file_size_kb))
    
    if not png_files:
        print("没有找到需要优化的图片文件")
        return
    
    print(f"找到 {len(png_files)} 个需要优化的PNG文件:")
    for file_path, size_kb in png_files:
        print(f"  {os.path.basename(file_path)}: {size_kb:.1f}KB")
    print()
    
    # 优化图片
    success_count = 0
    for file_path, size_kb in png_files:
        filename = os.path.basename(file_path)
        output_path = os.path.join(args.output_dir, filename)
        
        if optimize_png_image(file_path, output_path, (args.max_width, args.max_height), args.quality):
            success_count += 1
    
    print(f"优化完成! 成功处理 {success_count}/{len(png_files)} 个文件")
    print(f"优化后的文件保存在: {args.output_dir}")

if __name__ == '__main__':
    main() 